module.exports = (app) => {
  const { config } = app
  const { dict, constant } = config
  const { ORDER_STATE_AWAIT_PAY } = constant
  const { Schema, model, getModelName, formatDate, pre } = app.jax.mongoose
  const modelName = getModelName(__filename)

  const schema = new Schema({
    modelName: String, // 模型名称
    parentId: Schema.Types.ObjectId, // 上级ID
    rank: { type: Number, set: (value) => (value != '' ? Number(value) : null) }, // 序号
    isTop: { type: Boolean, default: false }, // 是否置顶，序号设置后自动置顶
    // 模型配置
    modelSchema: [
      {
        rank: Number, // 顺序
        name: String, // 字段名
        label: String, // 标签
        alias: String, // 别名
        dataType: String, // 数据类型
        required: Boolean, // 必填
        // rules: [String], // 规则
        json: Schema.Types.Mixed,
        options: Schema.Types.Mixed, // 选项
        defaultValue: Schema.Types.Mixed, // 默认数据
        // jsonStr: String,
        remark: String, // 备注
      },
    ],
  })

  // 修改
  schema.pre(['updateOne', 'findOneAndUpdate', 'updateMany'], function () {
    const data = this.getUpdate()
    pre.getRank(data)
  })

  // 新增
  schema.pre('save', function () {
    pre.getRank(this)
  })

  const Model = model(modelName, schema)

  return Model
}
